#pragma once

#include "core/system.h"

#include "input/keyboard.h"
#include "input/mouse.h"
#include "input/joystick.h"

#include "video/video.h"

namespace natrium {
	namespace input {
		class Input:
			public core::System
		{
		public:
			Input();
			virtual ~Input();

			virtual bool init();
			virtual void update();
			virtual void shutdown();

			void operator()(const video::WindowCreated&);

			const Keyboard& getKeyboard() const;
			const Mouse& getMouse() const;

		private:
			Input(const Input&);
			Input& operator = (const Input&);

			Keyboard mKeyboard;
			Mouse mMouse;

			std::vector<std::unique_ptr<Joystick>> mJoysticks;
		};
	}
}